package com.consumer.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpStatus;
import xiaohua.utils.DateUtil;

import java.io.Serializable;
import java.util.Date;

/**
 * @author Liunh
 */
@Data
@NoArgsConstructor
public class Message<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 信息来源
     * 市，区，学校，图书馆
     */
    private String source;

    /**
     * 发送目的地
     * 市，区，学校，图书馆
     */
    private String target;

    /**
     * 消息数据
     */
    private T data;

    /**
     * 数据类型（0站内信、1图书数据、2读者数据、3借阅数据、4电子书数据，5电子书点击量，6电子书收藏量，7电子书阅读量，8电子书被收藏明细，9短信，10邮件，11进馆记录）
     */
    private Integer dataType;

    /**
     * 批次号
     * 一次发送或者一次接收
     */
    private String batchNo;

    /**
     * 消息发送时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date sendTime;

    /**
     * 消息描述
     */
    private String desc;

    /**
     * 操作状态码
     */
    private Integer code;

    public Message(String source, String target, T data) {
        super();
        this.source = source;
        this.target = target;
        this.data = data;
        this.desc = "";
        this.code = HttpStatus.OK.value();
        this.sendTime = DateUtil.getCurrentDate();
    }

    public Message(String source, String target, T data, String desc) {
        super();
        this.source = source;
        this.target = target;
        this.data = data;
        this.desc = desc;
        this.code = HttpStatus.OK.value();
        this.sendTime = DateUtil.getCurrentDate();
    }

    public Message(String source, String target, T data, String desc, Date sendTime) {
        super();
        this.source = source;
        this.data = data;
        this.desc = desc;
        this.code = HttpStatus.OK.value();
        this.target = target;
        this.sendTime = sendTime;
    }

}
